home *** CD-ROM | disk | FTP | other *** search
- /*
- settings.js
-
- Copyright ⌐ 2007 Against Intuition, Inc. <info@mywot.com>
- */
-
- /* Globals */
-
- var selected = null;
- var changes = false;
- var warning_custom_allowed = false;
- var apps = [ 0, 1, 2, 4 ];
-
- /* Buttons */
-
- function update_buttons()
- {
- $$('.button').each(function(button, i) {
- if (changes) {
- button.removeClass('disabled');
- } else {
- button.addClass('disabled');
- }
- });
- }
-
- /* Navigation */
-
- function setpage()
- {
- if ($('loading-page').getStyle('display') != 'none') {
- return;
- }
-
- selected = null;
-
- $$('.page').each(function(page, i) {
- if (window.location.hash + '-page' == '#' + page.id) {
- selected = page.id;
- } else {
- page.setStyle('display', 'none');
- }
- });
-
- if (!selected || selected == 'loading-page') {
- selected = 'ratings-page';
- }
-
- var hash = selected.replace('-page', '');
-
- $(selected).setStyle('display', 'block');
- window.location.hash = '#' + hash;
-
- $$('.tab').each(function(tab, i) {
- if (tab.id == 'tab-' + hash) {
- tab.addClass('selected');
- } else {
- tab.removeClass('selected');
- }
- });
-
- $('settings').setProperty('class', hash);
-
- update_buttons();
- init_forms(selected);
- }
-
- /* Sample iframes */
-
- function switch_sample(base, current, hidden, src)
- {
- var ready = ($(hidden).getProperty('src') == src);
-
- if (!ready) {
- $(hidden).setProperty('src', src);
-
- if (selected == base) {
- window.setTimeout(function() {
- $(hidden).setStyle('display', 'block');
- $(current).setStyle('display', 'none');
- }, 500);
- return;
- }
- }
-
- $(hidden).setStyle('display', 'block');
- $(current).setStyle('display', 'none');
- }
-
- function set_sample(base, src)
- {
- var current = base + '-sample-0';
- var hidden = base + '-sample-1';
-
- if ($(current).getStyle('display') == 'none') {
- current = hidden;
- hidden = base + '-sample-0';
- }
-
- if ($(current).getProperty('src') != src) {
- switch_sample(base, current, hidden, src);
- }
- }
-
- function update_samples()
- {
- var src = 'chrome://wot/locale/sample.html?';
-
- if ($('use_search_level').checked) {
- src += 'negative';
- }
-
- set_sample('searching', src);
-
- if ($('show_search_popup').checked) {
- src += 'popup';
- apps.slice(1).each(function(i, j) {
- if (!$('show_application_' + i).checked) {
- src += 'r' + i;
- }
- });
- }
-
- set_sample('popup', src);
- }
-
- /* Warnings */
-
- function update_warnings()
- {
- apps.slice(1).each(function(i, j) {
- $('warnings-slider-' + i).setStyle('display',
- ($('show_application_' + i).checked) ? 'block' : 'none');
- });
-
- update_warnings_preset();
- }
-
- /* Warning presets */
-
- var warning_levels = [ 19, 39, 59 ];
- var warning_type_none = 0;
- var warning_type_notification = 1;
- var warning_type_warn = 2;
- var warning_type_block = 3;
- var warning_type_default = warning_type_warn;
-
- var warning_presets = [
- {
- id: 'none',
- levels: [ 0, 0, 0, 0 ],
- unknowns: [ false, false, false, false ],
- types: [ warning_type_none, warning_type_none, warning_type_none, warning_type_none ]
- }, {
- id: 'moderate',
- levels: [ warning_levels[0], warning_levels[0], warning_levels[0], 0 ],
- unknowns: [ false, false, false, false ],
- types: [ warning_type_warn, warning_type_warn, warning_type_warn, warning_type_none ]
- }, {
- id: 'normal',
- levels: [ warning_levels[1], warning_levels[1], warning_levels[1], 0 ],
- unknowns: [ false, false, false, false ],
- types: [ warning_type_warn, warning_type_warn, warning_type_warn, warning_type_none ]
- }, {
- id: 'effective',
- levels: [ warning_levels[2], warning_levels[2], warning_levels[2], 0 ],
- unknowns: [ false, false, false, false ],
- types: [ warning_type_warn, warning_type_warn, warning_type_warn, warning_type_none ]
- }
- ];
-
- function change_warning_type_default(type)
- {
- for (var i = 0; i < warning_presets.length; ++i) {
- for (var j = 0; j < warning_presets[i].types.length; ++j) {
- if (warning_presets[i].types[j] != warning_type_none &&
- warning_presets[i].types[j] != warning_type_block) {
- warning_presets[i].types[j] = type;
- }
- }
- }
-
- apps.each(function(i, j) {
- var input = $('warning_type_' + i);
- var current = Number(input.getProperty('value'));
- if (current != warning_type_none &&
- current != warning_type_block) {
- input.setProperty('value', type);
- }
- });
-
- warning_type_default = type;
- update_warnings_preset();
- }
-
- function update_warnings_notification()
- {
- var type = warning_type_warn;
-
- apps.each(function(i, j) {
- var input = $('warning_type_' + i);
- var current = Number(input.getProperty('value'));
- if (current == warning_type_notification) {
- type = current;
- }
- });
-
- $('warnings-type-notification').setProperty('checked',
- (type == warning_type_notification));
- change_warning_type_default(type);
- }
-
- function toggle_warnings_notification()
- {
- if ($('warnings-type-notification').checked) {
- change_warning_type_default(warning_type_notification);
- } else {
- change_warning_type_default(warning_type_warn);
- }
- }
-
- function select_warnings_preset(id)
- {
- $('warnings-level-' + id).setProperty('checked', true);
- $$('.warnings-help').each(function(item, j) {
- item.setStyle('display', 'none');
- });
- $('warnings-help-' + id).setStyle('display', 'block');
- init_forms(selected);
- }
-
- function update_warnings_preset()
- {
- var match = false;
-
- for (var i = 0; i < warning_presets.length; ++i) {
- match = true;
-
- apps.each(function(j, k) {
- if (j > 0 && !$('show_application_' + j).checked) {
- return;
- }
- if (Number($('warning_level_' + j).getProperty('value')) !=
- warning_presets[i].levels[k]) {
- match = false;
- return;
- }
- if ($('warning_unknown_' + j).checked !=
- warning_presets[i].unknowns[k]) {
- match = false;
- return;
- }
- if (Number($('warning_type_' + j).getProperty('value')) !=
- warning_presets[i].types[k]) {
- match = false;
- return;
- }
- });
-
- if (match) {
- select_warnings_preset(warning_presets[i].id);
- break;
- }
- }
-
- if (!match) {
- select_warnings_preset('custom');
- }
-
- return match;
- }
-
- function set_warnings_preset(id)
- {
- var match = false;
-
- for (var i = 0; i < warning_presets.length; ++i) {
- if (('warnings-level-' + warning_presets[i].id) != id) {
- continue;
- }
-
- apps.each(function(j, k) {
- $('warning_level_' + j).setProperty('value',
- warning_presets[i].levels[k]);
-
- $('warning_unknown_' + j).checked =
- warning_presets[i].unknowns[k];
-
- $('warning_type_' + j).setProperty('value',
- warning_presets[i].types[k]);
- });
-
- match = true;
- select_warnings_preset(warning_presets[i].id);
- break;
- }
-
- if (!match) {
- update_warnings_preset();
- }
-
- update_warnings_sliders();
- }
-
- /* Warning customization */
-
- function update_warnings_sliders()
- {
- apps.each(function(i, j) {
- var slider = $('warnings-slider-' + i);
- var level = Number($('warning_level_' + i).getProperty('value'));
- var type = Number($('warning_type_' + i).getProperty('value'));
-
- [ 0, 1, 2 ].each(function(k, l) {
- if (type != warning_type_none && level >= warning_levels[k]) {
- slider.addClass('level-' + k);
- } else {
- slider.removeClass('level-' + k);
- }
- });
-
- if (type == warning_type_block) {
- $('warnings-type-' + i + '-stack').addClass('blocking');
- $('warnings-type-' + i + '-stack').removeClass('warning');
- } else {
- $('warnings-type-' + i + '-stack').addClass('warning');
- $('warnings-type-' + i + '-stack').removeClass('blocking');
- }
- });
- }
-
- function update_warning_type(i)
- {
- var level = Number($('warning_level_' + i).getProperty('value'));
- var unknown = $('warning_unknown_' + i).checked;
-
- var type = Number($('warning_type_' + i).getProperty('value'));
- var set = type;
-
- if (level > 0 || unknown) {
- if (type == warning_type_none) {
- set = warning_type_default;
- }
- } else if (type != warning_type_none) {
- set = warning_type_none;
- }
-
- if (type != set) {
- $('warning_type_' + i).setProperty('value', set);
- update_warnings_preset();
- update_warnings_sliders();
- return true;
- }
-
- return false;
- }
-
- function set_warnings_slider(i, level)
- {
- $('warning_level_' + i).setProperty('value', level);
-
- if (!update_warning_type(i)) {
- update_warnings_preset();
- update_warnings_sliders();
- }
-
- changes = true;
- update_buttons();
- }
-
- function increase_warnings_slider(i)
- {
- var type = Number($('warning_type_' + i).getProperty('value'));
- var level = Number($('warning_level_' + i).getProperty('value'));
-
- var set = warning_levels[2];
-
- if (type == warning_type_none || level < warning_levels[0]) {
- set = warning_levels[0];
- } else if (level < warning_levels[1]) {
- set = warning_levels[1];
- }
-
- set_warnings_slider(i, set);
- }
-
- function decrease_warnings_slider(i)
- {
- var level = Number($('warning_level_' + i).getProperty('value'));
- var set = 0;
-
- for (var j = 2; j >= 0; --j) {
- if (level > warning_levels[j]) {
- set = warning_levels[j];
- break;
- }
- }
-
- set_warnings_slider(i, set);
- }
-
- function toggle_warnings_type(i)
- {
- var type = Number($('warning_type_' + i).getProperty('value'));
- var set = warning_type_default;
-
- if (type != warning_type_block) {
- set = warning_type_block;
- }
-
- $('warning_type_' + i).setProperty('value', set);
-
- if (type == warning_type_none) {
- set_warnings_slider(i, warning_levels[0]);
- } else {
- update_warnings_preset();
- update_warnings_sliders();
- changes = true;
- update_buttons();
- }
- }
-
- function toggle_warnings_unknown(i)
- {
- if (!update_warning_type(i)) {
- update_warnings_preset();
- }
- }
-
- /* Forms */
-
- var forms_inited = false;
-
- function init_forms(container)
- {
- var elems = 'input';
- if (container) {
- elems = '#' + container + ' ' + elems;
- } else if (forms_inited) {
- return;
- }
-
- forms_inited = true;
-
- $$(elems).each(function(input, i) {
- var type = input.getProperty('type');
- if (type != 'checkbox' && type != 'radio') {
- return;
- }
- var label = null;
- $$('label').each(function(item, j) {
- if (item.getProperty('for') == input.id) {
- label = item;
- }
- });
- if (!label) {
- return;
- }
- input.addClass('replaced');
- label.addClass(type);
- if (input.checked) {
- label.addClass('checked');
- } else {
- label.removeClass('checked');
- }
- if (!container) {
- label.addEvent('click', function() {
- if (this.hasClass('checkbox')) {
- this.toggleClass('checked');
- } else if (this.hasClass('radio')) {
- var box = $(this.getProperty('for'));
- clear_radios(box.getProperty('name'));
- this.addClass('checked');
- }
- changes = true;
- update_buttons();
- });
- }
- });
- }
-
- function clear_radios(name)
- {
- $$('label.radio').each(function(item, i) {
- var input = $(item.getProperty('for'));
- if (!input || (name && input.getProperty('name') != name)) {
- return;
- }
- item.removeClass('checked');
- });
- }
-
- /* Page initialization */
-
- var rating_preview_height = 60;
-
- function init_ratings()
- {
- apps.slice(1).each(function(a, i) {
- var item = $('show_application_' + a);
-
- item.addEvent('click', function() {
- init_forms(selected);
-
- if (item.checked) {
- new Fx.Style('ratings-preview-' + i, 'height', {
- duration: 500,
- transition: Fx.Transitions.quadInOut,
- onStart: function() {
- $('ratings-preview-' + i).setStyle('height', 0);
- $('ratings-preview-' + i).setStyle('display', 'block');
- },
- onComplete: function() {
- update_warnings();
- update_samples();
- }
- }).start(0, rating_preview_height)
- } else {
- new Fx.Style('ratings-preview-' + i, 'height', {
- duration: 500,
- transition: Fx.Transitions.quadInOut,
- onComplete: function() {
- $('ratings-preview-' + i).setStyle('display', 'none');
- update_warnings();
- update_samples();
- }
- }).start(rating_preview_height, 0);
- }
- });
- if (!item.checked) {
- $('ratings-preview-' + i).setStyle('display', 'none');
- }
- });
- }
-
- function init_warnings()
- {
- var level = $('wotlevel').getProperty('level');
-
- if (level && level == "registered") {
- warning_custom_allowed = true;
- }
-
- if (!warning_custom_allowed) {
- var cover = $('warnings-custom-cover');
-
- cover.setStyle('display', 'block');
- cover.addEvent('click', function() {
- showmessage('custom');
- });
-
- $('warnings-level-custom').addEvent('click', function() {
- showmessage('custom');
- update_warnings_preset();
- });
- } else {
- $('warnings-level-custom').addEvent('click', function() {
- select_warnings_preset('custom');
- });
-
- $('warnings-registered').setStyle('display', 'none');
- }
-
- update_warnings_notification();
- update_warnings_preset();
- update_warnings_sliders();
-
- for (var i = 0; i < warning_presets.length; ++i) {
- $('warnings-level-' + warning_presets[i].id).addEvent('click', function() {
- set_warnings_preset(this.id);
- });
- }
-
- apps.each(function(i, j) {
- $('warnings-slider-' + i + '-increase').addEvent('click', function() {
- increase_warnings_slider(i);
- });
- $('warnings-slider-' + i + '-decrease').addEvent('click', function() {
- decrease_warnings_slider(i);
- });
- [ 0, 1, 2 ].each(function(k, l) {
- $('warnings-slider-' + i + '-image-' + k).addEvent('click', function() {
- set_warnings_slider(i, warning_levels[k]);
- });
- });
- $('warnings-type-' + i + '-switch').addEvent('click', function() {
- toggle_warnings_type(i);
- });
- $('warning_unknown_' + i).addEvent('click', function() {
- toggle_warnings_unknown(i);
- });
- });
-
- $('warnings-type-notification').addEvent('click', function() {
- toggle_warnings_notification();
- });
- }
-
- function init_searching()
- {
- var type = Number($('search_type').getProperty('value'));
-
- [ 'optimized', 'worst', 'first' ].each(function(item, i) {
- var elem = $('searching-type-' + item);
- if (type == i) {
- elem.setProperty('checked', true);
- $('searching-help-' + item).setStyle('display', 'block');
- }
- elem.setProperty('wottype', i);
- elem.addEvent('click', function() {
- $('search_type').setProperty('value',
- this.getProperty('wottype'));
- $$('.searching-help-text').each(function(text, j) {
- text.setStyle('display', 'none');
- });
- $('searching-help-' + item).setStyle('display', 'block');
- });
- });
-
- $('use_search_level').addEvent('click', function() {
- update_samples();
- });
- }
-
- function init_popup()
- {
- $('show_search_popup').addEvent('click', function() {
- update_samples();
- });
- }
-
- function init_advanced()
- {
- var list = $('advanced-ignore-list');
- list.setProperty('value', $('norepsfor').getProperty('value'));
-
- var changed = function() {
- $('norepsfor').setProperty('value',
- $('advanced-ignore-list').getProperty('value'));
- changes = true;
- update_buttons();
- };
-
- list.addEvent('change', changed);
- list.addEvent('keypress', changed);
- }
-
- /* Messages */
-
- function showmessage(msg)
- {
- $(msg).setStyle('opacity', 0);
- $(msg).setStyle('display', 'block');
- $('messages').setStyle('display', 'block');
-
- new Fx.Style(msg, 'opacity', {
- duration: 250,
- transition: Fx.Transitions.quadInOut
- }).start(0, 0.9);
-
- window.setTimeout(function() {
- new Fx.Style(msg, 'opacity', {
- duration: 500,
- transition: Fx.Transitions.quadInOut,
- onComplete: function() {
- $$('.message').each(function(item, i) {
- item.setStyle('display', 'none');
- });
- $('messages').setStyle('display', 'none');
- }
- }).start(0.9, 0);
- }, 2500);
- }
-
- /* Callbacks */
-
- function wotsettings_ready()
- {
- $('loading-page').setStyle('display', 'none');
-
- /* Initialize */
- init_forms();
- init_ratings();
- init_warnings();
- init_searching();
- init_popup();
- init_advanced();
-
- update_samples();
- update_warnings();
-
- /* Page */
- setpage();
-
- /* Tabs */
- $$('.tab').each(function(tab, i) {
- var location = '#' + tab.id.substr(4);
- tab.addEvent('click', function() {
- window.location.hash = location;
- setpage();
- });
- });
-
- /* Cancel */
- $('cancel').addEvent('click', function() {
- if (changes) {
- window.location.reload();
- }
- });
- }
-
- function wotsettings_saved()
- {
- changes = false;
- update_buttons();
- showmessage('saved');
- }
-
- function wotsettings_failed()
- {
- showmessage('failed');
- }
-